The display and transmission of visual images is increasingly important for modern communications. In particular, it is important for modern computer driven displays to receive, transmit, and display sequences of images in rapid succession such as is shown in movies. The quality of the visual display can be improved by representing the visual images in a digital format. Generally, a visual image can be represented by dividing the image into sufficiently small picture elements, called pixels, and assigning to each pixel a color and a value representing the intensity of the color for the pixel. For example, a typical 8 inch by 10 inch visual image may be divided into a two dimensional array of 768 by 1024 pixels wherein each pixel is further divided into 3 subpixels. The three subpixels are each associated with one of the three primary colors red, green, or blue. Each subpixel is assigned a digital value corresponding to the intensity level for the color of the subpixel. The subpixels are small enough such that the human eye does not resolve each subpixel. Rather, the image presented by a pixel to the viewer is some combination of the three colors associated with each subpixel weighted by the intensity value for each subpixel color. As a result, the visual image is represented by three two dimensional matrices of intensity values.
This digital image represents a high quality image because the pixels are small. However, as the pixel gets smaller, there are more pixels for the same size image and more intensity values to store, manipulate, and transmit. The fact that more pixels requires more data also results in a reduction in the ability to transmit images because the amount of data for each image transmitted is so large. As a result, various efforts have been made to transform RGB data into another form of data which can be transmitted and stored efficiently and which can also be re-transformed back into RGB data for display. The new form of data most often chosen relates the RGB data to a luminance value and two chrominance values. In particular, the luminance value represents the intensity of a pixel on a grey scale which provides an accurate representation of the image to a monochrome display. The luminance value is obtained by weighting each intensity value of the RGB data and combining them. For example, the National Television Systems Committee (NTSC) standard luminance value Y=0.299R+0.587G+0.114B, wherein R is the red intensity value, G is the green intensity value, and B is the blue intensity value. The two chrominance values convey information which describes how the colors differ from monochrome. For example, the NTSC values are U=Y-B and V=Y-R. The RGB to YUV transform compacts most of the visual intensity information into the luminance variable. This effect is similar to viewing a color image on a monochrome monitor in that the viewer understands a significant portion of the image but does not understand it all. This effect is useful for reducing the amount of data representing the image because the YUV data can be digitally filtered and coded such that much of the chrominance data can be discarded and replaced with code values while the filtered and coded YUV data is still an accurate representation of the digitized image.
The Ensuing digital filtering eliminates unneeded data typically includes block transformations of each of the separate YUV components using a technique such as discrete cosine transforms (DCT). That is, each of the YUV components are subdivided into blocks of data which is then filtered. The output of the DCT filter is then further compressed through a coding technique. In addition to the DCT filter, the blocks of DCT output data are subsampled (typically 2-to-1 or 4-to-1) in the horizontal or vertical (or both) directions. Generally, not all the DCT output data is subsampled, but rather only the DCT output from the chrominance components are subsampled. The DCT output from the luminance component is generally left intact because it contains most of the image data.
The basic problem with the RGB to YUV transform is that even though the YUV form of the data can be conveniently filtered and compacted, transforming the RGB data into the YUV form requires several multiplications, additions and/or subtractions. This is a problem because each multiplication, addition or subtraction requires time for a computer processor to implement. Processing multiple operations for each pixel and processing thousands of pixels per image requires a significant amount of processor time. This amount of processor time can be large enough to degrade the rate at which sequential images can be displayed. One prior art solution to this problem is to replace the multiplication operations with look up tables. This may increase the speed of the RGB to YUV transformation because look up tables may reduce the time required for multiplication operations which often are much slower than additions or subtractions. Multiplications are often slower than additions or subtractions because multiplications in the binary number system are typically a series of bit shift and add operations so that the time for each multiplication is a multiple of an add operation. Also, special purpose multiplication hardware is much more complex than special purpose fixed point addition, subtraction and shift hardware. Even though a look up table decreases the number multiplication operations, the look up table itself is not very fast. Moreover, many computer processors are very efficient in using the time between multiplication steps when performing many multiplications because of the pipelined structure of the processor. When look up tables are used in conjunction with computer processors, the pipelined structure can be disrupted and the overall efficiency of processing the RGB to YUV transform decreased even though the individual look up table operation is faster than the multiplication operation. Therefore, look up tables have not been very successful in increasing the speed of the RGB to YUV transform.
Another prior art technique for reducing the number of multiplications in an RGB to YUV transform is to rearrange the coefficients in the equations such that the multiplications are by factors of two. This is efficient because multiplication by a factor of two in a binary number system merely means bit shifting a number which is very fast. For example, if Y=0.25R+0.5G+0.25B, then the product of 0.25 and R can be achieved by bit shifting R two places to the right rather than actually multiplying the numbers. This bit shift operation significantly improves the speed of the RGB to YUV transformation by minimizing the multiplication time without changing the hardware. The problem with this technique is that the NTSC coefficients are chosen based on the sensitivity of the human eye. The human eye does not react equally to each of the three primary colors nor in proportion to the intensity of the three primary colors. This means that significantly changing the transform coefficients changes the effectiveness of the luminance variable. Such a color space change of variables may be significantly less effective for compression.